package cn.itcast.oa.interceptor;

import cn.itcast.oa.model.User;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;

//拦截器，对每一个action都会进行拦截处理
public class CheckPrivilegeInterceptor extends AbstractInterceptor {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	@Override
	public String intercept(ActionInvocation invocation) throws Exception {
		User user=(User) ActionContext.getContext().getSession().get("user");
		
		//获得当前action的信息，namespace，actionName得到的是方法名
		String nameSpace=invocation.getProxy().getNamespace();
		String actionName=invocation.getProxy().getActionName();
		String privilegeUrl=null;
		
		if(nameSpace.endsWith("/")){
			privilegeUrl=nameSpace+actionName;	
		}else{
			privilegeUrl=nameSpace+"/"+actionName;
		}
		
		//要去掉开头的‘/’
		if(privilegeUrl.startsWith("/")){
			privilegeUrl=privilegeUrl.substring(1);
		}
		// 如果未登录用户.
		if(user==null){
			
			if(privilegeUrl.startsWith("userAction_login")){//userAction_loginUI,userAction_login
			// 如果是去登录的就放行
				return invocation.invoke();
			}else{
			// 如果不是就转化到登录界面
				return "loginUI";
			}
		}else{
			if(user.hasPrivilegeByUrl(privilegeUrl)){
				// 如果已登录用户（就判断权限）
				// 如果有权限，就放行
				return invocation.invoke();
			}else{
				// 如果没有权限，就转到提示页面
				return "noPrivilegeUI";
			}
			
 			
		}
	}

}
